using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace JGSY.CMS.LowCode.Platform.Infrastructure.Configuration.ServiceModules
{
    /// <summary>
    /// 服务模块接口
    /// 定义模块化服务注册的统一规范，支持基于权限的动态启用/禁用
    /// </summary>
    public interface IServiceModule
    {
        /// <summary>
        /// 模块名称
        /// </summary>
        string ModuleName { get; }

        /// <summary>
        /// 模块执行优先级（数字越小优先级越高）
        /// </summary>
        int Priority { get; }

        /// <summary>
        /// 是否在快速启动模式下加载
        /// </summary>
        bool LoadInFastMode { get; }

        /// <summary>
        /// 模块对应的权限枚举
        /// </summary>
        ModulePermission RequiredPermission { get; }

        /// <summary>
        /// 是否为关键模块（关键模块即使权限禁用也会加载基本功能）
        /// </summary>
        bool IsCriticalModule { get; }

        /// <summary>
        /// 配置服务（完整功能）
        /// </summary>
        /// <param name="services">服务集合</param>
        /// <param name="configuration">配置对象</param>
        void ConfigureServices(IServiceCollection services, IConfiguration configuration);

        /// <summary>
        /// 配置服务的精简版本（当权限被禁用时使用）
        /// </summary>
        /// <param name="services">服务集合</param>
        /// <param name="configuration">配置对象</param>
        void ConfigureMinimalServices(IServiceCollection services, IConfiguration configuration);

        /// <summary>
        /// 验证模块依赖和配置
        /// </summary>
        /// <param name="configuration">配置对象</param>
        /// <returns>验证结果</returns>
        bool ValidateConfiguration(IConfiguration configuration);
    }
}
